package com.tianbao54.kotlin_01

// 扩展的作用域
/**
 * 1.扩展函数所定义在的类实例叫作分发接收者（ dispatch receiver ）
 * 2.扩展函数所扩展的那个类的实例叫作扩展接收者 ( extension receiver )
 * 3.当以上两个名字出现冲突时，扩展接收者优先级最高
 */

class DD {

    fun method () {
        println("dd method")
    }
}

class EE {

    fun mehtod2 () {
        println("EE method2")
    }

    /**
     * 既可以用 DD 中的方法成员，也可以用EE 中的方法
     */
    fun DD.hello () {
        method()
        mehtod2()
    }

    fun world (dd:DD) {
        dd.hello()
    }

    // 高用的是拓展优先级最高，调用的是 dd 中的 toString
    fun DD.output () {
        println("toString : ${toString()}")
        println("EE toString : ${this@EE.toString()}")
    }

    fun test () {
        var dd = DD ()

        dd.output()
    }
}

// 扩展可以很好的解决 java 中充斥的各种辅助类的问题。
fun main(args: Array<String>) {

    // 不能直接调用 EE 中声明的扩展方法。
    var dd = DD ()

    EE().test()
}